Menu

STO How Keybinds Work

jeffvan

How Keybinds Work

This section contains details on how the Star Trek Online keybind system works.

Index

The Queue and keybind sets
Space
Ground
Keybind Application
Advantages of the Queue and Activation time feature
Keybind System
The Chat Window Format
Text File Format
Possible Keys
Key Modifiers and Combination of keys
Variables
Common Commands
Chat Window Keybind Examples
Text File Key Bind Exaples
Simplifying Key Binds by adding some complexity first
Using the Text File to Import Key Binds
Execution Order
Dangers of Button Smashing
Text File Example
Other Resources

The QUEUE and keybind sets

The first part to understand about the Star Trek Online engine is the ability activation queue. For some areas there might be multiple queues. The queues have two slots in them. The first slot is the ability that is currently being activated and the second slot is the next ability that will be activated. When a new ability is pressed on the tray it is placed into the second slot, if the primary slot is filled. If there is an existing ability in the second slot, it will be replaced by the new ability. More information is provided on this below.

Space has a different keybind set than ground. If you want to create a keybind for space, you actually have to be in space to create the keybind. The same goes for ground. For space keybinds you can be in hyper space or local space and the keybinds will be the same. For ground you can be on your ship's bridge or anywhere where you can see your character move. There is more information on ground keybind sets below.

Space

In space, weapons have a separate queue from the abilities queue. This allows you to have your weapons on autofire without it disrupting your activation queue. Most abilities in space have a 0.5 second activation time. Some are only 0.25 seconds. This generally creates a two ability per second pace.

This separate queue for weapons and abilities causes an actual problem. Having a keybind with multiple abilities and weapons will cause the weapons not to trigger. Something related to the queuing of the ability removes the weapons from being queued. To create a keybind that fires only a specific set of weapons, will require you to place the weapons on their own key. You will therefore need to be pressing two keys, one for your abilities and one for your weapons.

Ground

On ground, all abilities including weapon abilities, use a single queue. Because of this feature, you should take care in creating keybinds since abilities can displace weapon fire as you are attempting to shoot. Most abilities are 0.5 activation time BUT some significant abilities have a much larger activation time. Some even last 4 seconds. Because of the larger activation time and the single queue, most players experience a latency effect, which is NOT server lag but a design feature.

On the ground there are two sets of keybinds. If you are in RPG mode you have a different set of keybinds than the set you have in Shooter mode. So make sure you are in the mode for which you want to create the keybind.

Keybind Application (MAKE IT EASY ON YOURSELF)

The keybind application was developed to make it a lot easier to develop complex keybinds. The first version of this application was developed to help a fleet mate with little understanding of computer operations. Since then the keybind application has evolved to be even more powerful. It has the ability to help you create keybind sets that you can actively switch during game play. The following videos will demonstrate the usage of the application:

Basic Operations
Web Open (Now Called INFO)
Predefined Keys
Create Keys that Cycle
Keybind Sets
How to use Preset

Download it here!

Advantages of the Queue and Activation time feature

The activation time and queue system allows players far away from the server location to have an equal footing with players closer to the server. With a latency of 200 milliseconds and an activation time of 500 milliseconds the ability would be visible to the opponent before it is active; and would still allow 300 milliseconds for the response. This might seem like a small time gap, but with good game knowledge the game becomes a fast version of speed chest.

In addition to the feature that allows people with a higher latency to play alongside players with a lower latency, there is also the feature of averaging 2 abilities per second. This creates a pace to the game and sets up a trend to a players attack in advance. With an average limit of two abilities a second the game doesn't get too overwhelmed with abilities. This is especially true on the ground, but overall in the game, this is a feature that is disappearing due to the lack of activation times on new abilities.

Keybind System

Key binds can either be entered through the chat window or through a text file that you can use to import the key binds. For short key binds the chat window works well but for long key binds the text file will be a need.

The Chat Window Format

Command Structure: /bind <key>
Command Part: /bind the bind command .
Command Part: <key> the key you want to assign the key bind to.
Command Part: the command that will be assigned to the key.</key></key>

The command section can contain several commands separated by a delimiter. The delimiter is a double dollar sign ($$). For several commands encapsulate the series of commands with double quotations.

IMPORTANT: It is important to disable the Profanity filter while using the Chat Window Bind commands. The Profanity filter will remove sequences of characters that involve the $$ sign. This change will cause the bind command to create an incorrect bind.

Text File Format
Command Structure: <key> ""
Command Part: <key> the key you want to assign the key bind to.
Command Part: the command that will be assigned to the key.</key></key>

The same delimiter that is used in the Chat Window is also used in the Text File Format. Separate commands with a double dollar signs ($$). All commands need to be encapsulated with double quotation marks. Each key bind is placed on its own line. It will be helpful to use a text editor such as notepad to create the key binds.

Possible Keys

You would use the Key Name in your bind command or in the text file.

Key Name Description
[ [
\ \
] ]
Add Add (+)
ALT Alt
LALT Alt (Left)
RALT Alt (Right)
Down Arrow Key: Down
Left Arrow Key: Left
Right Arrow Key: Right
Up Arrow Key: Up
, Comma (,)
Control Control
LCTRL Control (Left)
RCTRL Control (Right)
delete Delete
/ Divide (/)
End End
F1 Function Key 1
F10 Function Key 10
F11 Function Key 11
F12 Function Key 12
F13 Function Key 13
F14 Function Key 14
F15 Function Key 15
F16 Function Key 16
F17 Function Key 17
F18 Function Key 18
F19 Function Key 19
F2 Function Key 2
F20 Function Key 20
F21 Function Key 21
F22 Function Key 22
F23 Function Key 23
F24 Function Key 24
F3 Function Key 3
F4 Function Key 4
F5 Function Key 5
F6 Function Key 6
F7 Function Key 7
F8 Function Key 8
F9 Function Key 9
Home Home
insert Insert
A Key A
B Key B
C Key C
D Key D
E Key E
F Key F
G Key G
H Key H
I Key I
J Key J
K Key K
L Key L
M Key M
N Key N
O Key O
P Key P
Q Key Q
R Key R
S Key S
T Key T
U Key U
V Key V
W Key W
X Key X
Y Key Y
Z Key Z
enter Main Enter Key
Button1 Mouse Button 1
Button10 Mouse Button 10
Button2 Mouse Button 2
Button3 Mouse Button 3
Button4 Mouse Button 4
Button5 Mouse Button 5
Button6 Mouse Button 6
Button7 Mouse Button 7
Button8 Mouse Button 8
Button9 Mouse Button 9
Lbutton Mouse Left Press
Middleclick Mouse Middle Click
Rbutton Mouse Right Press
Wheelminus Mouse Scroll Down
Wheelplus Mouse Scroll Up
Multiply Multiply (*)
0 Number 0
1 Number 1
2 Number 2
3 Number 3
4 Number 4
5 Number 5
6 Number 6
7 Number 7
8 Number 8
9 Number 9
numpad0 Numerical Keypad 0
numpad1 Numerical Keypad 1
numpad2 Numerical Keypad 2
numpad3 Numerical Keypad 3
numpad4 Numerical Keypad 4
numpad5 Numerical Keypad 5
numpad6 Numerical Keypad 6
numpad7 Numerical Keypad 7
numpad8 Numerical Keypad 8
numpad9 Numerical Keypad 9
Decimal Numerical Keypad Decimal
Divide Numerical Keypad Divide
numpadenter Numerical Keypad Enter
PageDown Page Down
PageUp Page Up
. Period (.)
Shift Shift
Space Spacebar
Subtract Subtract (-)
Tab Tab
` Tilda Key (~)
Joy9 XBOX Contr [A Button]
Joy10 XBOX Contr [B Button]
Joy2 XBOX Contr [Back]
Joy3 XBOX Contr [L Thumb depress]
Joy5 XBOX Contr [Left Bumper]
Lstick_down XBOX Contr [Left Stick down]
Lstick_left XBOX Contr [Left Stick left]
Lstick_right XBOX Contr [Left Stick right]
Lstick_up XBOX Contr [Left Stick up]
Joy7 XBOX Contr [Left Trigger]
Joypad_down XBOX Contr [Pad down]
Joypad_left XBOX Contr [Pad left]
Joypad_right XBOX Contr [Pad right]
Joypad_up XBOX Contr [Pad up]
Joy4 XBOX Contr [R Thumb depress]
Joy6 XBOX Contr [Right Bumper]
Rstick_down XBOX Contr [Right Stick down]
Rstick_left XBOX Contr [Right Stick left]
Rstick_right XBOX Contr [Right Stick right]
Rstick_up XBOX Contr [Right Stick up]
Joy8 XBOX Contr [Right Trigger]
Joy1 XBOX Contr [Start]
Joy11 XBOX Contr [X Button]
Joy12 XBOX Contr [Y Button]

Key Modifiers and Combination of keys

You can create key combinations by using the + key to add combinations. To create a key combination that uses the left arrow key and the up arrow key you would use "Left+Up". You can do this for the Control key by adding Control+1 to create a combination key for Control 1. You can go even further and add multiple keys such as Control+1+2 which would require pressing the control key and the 1 and 2 key simultaneously.

Control+ Adding the Control+ in front of the key will setup a key combination of Control+<key>.
Alt+ Add the Alt+ in front of the key will setup a key combination of Alt+<key>
+ You can combine several keys by adding the + key between keys.
Example: /bind Control+F "team Hallo everyone."</key></key>

Variables

$Target The $Target contains the name your target. If this is included in text or in the space of a Name it will be replaced with the Name of your Target. For example: /bind c "team Target [$Target]". If our target's name is "Steve Alen" then this command will enter into team chat "Target [Steve Alen]".

Common Commands

Command Description
++AutoForward Ground: Walk forward (Automatically)
+Aim Ground: Enter Aim mode
+backward Ground: move backward
+Crouch Ground: Enter Crouch
+down Ship nose down
+Forward Ground: move forward
+left Ship nose left
+Left Ground: Strafe left
+Power_Exec Distribute_Shields Distribute shields
+right Ship nose right
+Right Ground: Strafe right
+Roll Ground: Roll
+Run Ground: Sprint
+TrayExecByTray <x> <y></y></x> Execute slot Y on tray X (Using real number system)
+TurnLeft Ground: Turn left
+TurnRight Ground: Turn right
+up Ship nose up
+Up Ground: Jump
+Walk Ground: Walk
Assist <x></x> Target the target of the person X.
defaultautoattack <x></x> Turn weapon autofire off and on. X = 1 turns it on and X = 0 turns it off.
bind_load_file <x></x> Load a bind file into the client. The X value is the name of the bind file to load.
bind_save_file <x></x> Saves all your binds to a text file. The X value is the name of the file to use.
camdist <x></x> X is the distance from the ship to the camera
CamReset Reset the camera position to default
camturntoface <x></x> Possible values for X is 0 or 1. When set to 1 the ship will attempt to turn when the camera is looking. This does not work with camUseAutoTargetLock.
camUseAutoTargetLock <x></x> Possible values for X is 0 and 1. If turned on the Camera will stay locked on the target.
camUseChaseCam <x></x> Possible values for X is 0 and 1. If it is turned on the camera will stay behind the ship.
Clear Clear your chat
CombatLog <x></x> Possible values are 0 or 1. If set to 1 then the combatlog will start recording. If set to 0 then no combat log recording will occur.
ControlSchemeCycle Ground: Toggle Shooter mode.
emote <x></x> Execute an emote with local text. The X value is the name of the emote
emote_notext <x></x> Execute an emote with no local text. The X value is the name of the emote
FireMines Fire all mines
FirePhasers Fire all beams and cannons
FirePhasersTorps Fire all beams, cannons and torpedos
FireProjectiles Fire all torpedos and mines
FireTorps Fire all torpedos
focustargetclear Clear the focus target
focustargetselect Target the focus target
focustargetset Set the Focus target to pin.
Follow Ground: Follow your friendly target
frameRateStabilizer <x></x> Possible values for X is 0 or 1. If it is 1 then the client attempts to stabilize how much the framerate changes.
gamma <x></x> The X value indicates the gamma adjustment. The normal value is 1.0 but when the client is launched for the first time you adjust this value through the tutorial.
GenSendMessage HUD_Root FireAll Fire all weapons
GenSendMessage Inventory_Root SwitchActiveWeapon Ground: Switch to alternate weapon
GenSendMessage Throttle_FullImpulse_Button FullThrottle Full Impulse toggle
GenSetEarlyOverrideFloat Hud_Buffs scale <x></x> Set the size of your tray icons to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
GenSetEarlyOverrideFloat Hud_Spacetraywindow_Large scale <x></x> Set the size of your tray icons to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
GenSetEarlyOverrideFloat Hud_Spacetraywindow_Secondary <x></x> Set the size of your vertical tray icons to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
GenSetEarlyOverrideFloat Hud_Statusself_Bufflist scale <x></x> Set the size of your own buffs to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
GenSetEarlyOverrideFloat Hud_Statustarget_Ground_Bufflist scale <x></x> Set the size of the ground buff icons on your target to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
GenSetEarlyOverrideFloat Hud_Statustarget_Space_Bufflist scale <x></x> Set the size of the space buff icons on your target to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
GenSetEarlyOverrideFloat Hud_Statustargetfocused_Ground_Bufflist scale <x></x> Set the size of the ground buff icons on your focus target to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
GenSetEarlyOverrideFloat Hud_Statustargetfocused_Space_Bufflist scale <x></x> Set the size of the space buff icons on your focus target to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
GenSetEarlyOverrideFloat Hud_Statustargetoftarget_Ground_Bufflist scale <x></x> Set the size of the ground buff icons on your target's target to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
GenSetEarlyOverrideFloat Hud_Statustargetoftarget_Space_Bufflist scale <x></x> Set the size of the space buff icons on your target's target to a factor of X. The default value is 1.0. At 2.0 the icons will be double their size.
HolsterToggle Ground: Toggle your gun to holster
InteractWindow Execute Interaction. This is the default execution to start a terminal or NPC interaction.
Inventory Open the character inventory.
local <x></x> Say something in local chat (local X)
Map Open the map.
maxfps <x></x> The X value will indicate the maximum frame rate value that is allowed.
netgraph <x></x> Possible values for X is 0 or 1. If it is 1 then the Ping times are displayed with a graph.
netTimingGraph <x></x> Possible values for X is 0 or 1. If it is 1 then the graph is shown when netgraph is turned on.
perFrameSleep <x></x> The X value will perform a client thread sleep routine after each frame is drawn for the milliseconds specified by X.
PvEQueues Open the PVE Queue missions
PvPQueues Open the PVP Queues
rdrMaxFramesAhead <x></x> The client will attempt to render X number of frames ahead but might not use the Graphical unit.
rdrMaxGPUFramesAhead <x></x> The client will attempt to render X number of frames ahead through the Graphical unit
ShowFPS <x></x> Possible values for X is 0 or 1. If it is 1 the Frames per second will be displayed.
showmem <x></x> Possible values for X is 0 or 1. If it is 1 then the memory used is displayed.
StatsPreset_Load Preset_1 Set to Attack Power setting
StatsPreset_Load Preset_2 Set to Defense Power setting
StatsPreset_Load Preset_3 Set to Speed Power setting
StatsPreset_Load Preset_4 Set to Balanced Power setting
Target <x></x> Target the item or person with the name X
target_clear Clear your target
Target_Enemy_Near Target nearest enemy (based on settings)
Target_Enemy_Next Target the next enemy (based on settings)
Target_Enemy_Next_Exposed Target the next exposed enemy
Target_Friend_Next Target the next friend
Target_Teammate <x></x> Target the teammate in position X
team <x></x> Say something to the team (team X)
tell <x>, <y></y></x> Send a tell of Y to person X. Ei. /tell @tester, Hi
throttleadjust <x></x> Add value to your throttle position. If X is 1.0 then it will add a 100 percent throttle but will stop at zero if it was in reverse. If X is -1.0 then the trottle will be adjusted a 100% back. If you were moving forward the throttle will stop at zero.
zone <x></x> Say something in zone chat (zone X)

Chat Window Key Bind Examples

/bind End "camUseChaseCam 1$$ camdist 200"
This example is great for space escorts. When you press the End button on the keyboard you will now be placed directly behind yourself at a the distance specified by camdist command. This command is a compound command. We used the double dollar sign delimiter to seperate two commands.

/bind 1 "target_teammate 1"
This command will target the teammate in position one of the team when you press the number one key above the qwerty keys.

/bind ` "target_Clear"
This command will clear your selected target to nothing when you press the tilde key.

Text File Key Bind Examples of the Above Commands
End "camUseChaseCam 1$$ camdist 200"
1 "target_teammate 1"
` "target_Clear"

Simplifying Key Binds by adding some complexity first
It can be a full time effort to create key binds to accomplish different complicated actions in the game. Deciding to make one change could require editing a complicated command to add one feature. There is a feature in the game that simplifies all of this. The game has 10 trays that can be used. Usually we make only three of them visible. Those other 7 remaining trays can be used in key binds. If we assign one key to a complete tray and then place our actions in those slots, we could now have a key that activates several actions. If we wanted to make changes all we have to do is go to that tray and alter the actions in the tray. No need to touch the key bind again.

The image shows where you can change the tray positions to access the other tray numbers.

Now to assign a key to tray 10 we will use a chain of commands. One thing to note is that in the chat window there is a maximum length that can be used. This limitation prevents us from assigning all the slots in a tray to one key. The maximum number of slots that can be assigned using the chat window is 8. To assign more you will need to use the text file method. The text file method will be elaborated on more later. If we wanted to assign tray 10 to the Numerical Key pad Zero button the following commands could be used:

Chat Window Command for 8 Slots of Tray 10
/bind numpad0 "+TrayExecByTray 9 0$$ +TrayExecByTray 9 1$$ +TrayExecByTray 9 2$$ +TrayExecByTray 9 3$$ +TrayExecByTray 9 4$$ +TrayExecByTray 9 5$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 7"

Text File Method for 10 Slots of Tray 10
numpad0 "+TrayExecByTray 9 0 $$ +TrayExecByTray 9 1 $$ +TrayExecByTray 9 2 $$ +TrayExecByTray 9 3 $$ +TrayExecByTray 9 4 $$ +TrayExecByTray 9 5 $$ +TrayExecByTray 9 6 $$ +TrayExecByTray 9 7 $$ +TrayExecByTray 9 8 $$ +TrayExecByTray 9 9"

Take note that we used the number 9 to reference tray 10. The easiest way to think of this is to just subtract one from the tray number and slot number.

Using the Text File to import Key Binds

What you will need is a text editor such as notepad. First let us look at the two commands that allow us to export and import key bind sets.

/bind_save_file <filename>
This command can be used to export your current key binds. The <filename> tag should be replaced with a name you can easily use and that has no spaces in it. You should also add a ".txt" at the end of the name so that you can locate and edit this file with notepad. An example of a filename would be spacekeys.txt . </filename></filename>

/bind_load_file <filename>
This command is used to import the key binds listed in the text file. The <filename> tag should be replaced with the name of the file. Make sure the file you are using has no spaces in the name. </filename></filename>

Steps:

  1. In the chat window enter the follow command and hit enter: /bind_save_file mykeys.txt

  2. Open Notepad and click on File Open.

  3. Browse to the Star Trek Online game folder. This location can be different depending on the method you used to install Star Trek Online. It could be located under the Program Files folder or under the Steam folder. What you are looking for is a Folder that is named "Star Trek Online" and it will have a sub folder with the name "Live". Your mykeys.txt file will be located under the "Live" folder. One possible method to locate the game folder is to right click on the Star Trek Online Game icon and selecting Properties. The Start in property will indicate where the Game might be located. The folder will contain the GameClient.exe file.

  4. Open the mykeys.txt file.

  5. You should see some existing key binds. Some are created by the game and others will be ones you have changed manually in the Key Binds screen in game.

  6. Enter your new commands on a new empty line.

  7. Save your text file.

  8. in the game's chat window enter the following command and hit enter: /bind_load_file mykeys.txt

Execution Order

When you create key binds with compounded commands you might want to be aware of the order in which the commands will execute. There are two phases to a key bind execution. The first Phase occurs when you press the key for the first time. The second phase is entered when you press the key a second time or repeatedly while an activity on the list is still activating. If you stop pressing the key and all the actions in the command list are no longer activating then Phase one is entered again.

Phase 1
In Phase one the first available action from left to right is picked and activated.

Phase 2
The First available skill from right to left is picked and activated. The priority therefore is increased from Left to Right.

Let us examine how the following key bind would work:
numpad0 "+TrayExecByTray 9 0 $$ +TrayExecByTray 9 1 $$ +TrayExecByTray 9 2 $$ +TrayExecByTray 9 3 $$ +TrayExecByTray 9 4 $$ +TrayExecByTray 9 5 $$ +TrayExecByTray 9 6 $$ +TrayExecByTray 9 7 $$ +TrayExecByTray 9 8 $$ +TrayExecByTray 9 9"

The resulting execution of Tray 10 is depicted in the image below:

If we press the key repeatedly, say twice a second, then we will enter Phase one and it will be followed by Phase two. Since there are two Battle Strategies on each end: In Phase one the first will be executed. In phase two it will already have been executed and will not be available as it is in a cooldown. The Tactical Initiative will therefore be activated second. From that point onwards, everything gains a priority from right to left. If we keep pressing the key then the priority remains right to left.

One way of fixing this in the key bind itself is to add two commands for the same slot. Let us look at the follow key bind:
numpad0 "+TrayExecByTray 9 9$$ +TrayExecByTray 9 0 $$ +TrayExecByTray 9 1 $$ +TrayExecByTray 9 2 $$ +TrayExecByTray 9 3 $$ +TrayExecByTray 9 4 $$ +TrayExecByTray 9 5$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 7$$ +TrayExecByTray 9 8$$ +TrayExecByTray 9 9"

By adding the same slot twice we can place an action in Slot 10 on Tray 10 to be the first action executed. If it is important to maintain the sequence then the action that goes into this slot should be readily available, before starting the pressed sequence. This will assist the transition from Phase 1 to Phase 2. We can also expand on this key bind further and always ensure a right to left execution.
numpad0 "+TrayExecByTray 9 9$$ +TrayExecByTray 9 8$$ +TrayExecByTray 9 7$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 5 $$ +TrayExecByTray 9 4$$ +TrayExecByTray 9 3$$ +TrayExecByTray 9 2$$ +TrayExecByTray 9 1 $$ +TrayExecByTray 9 0 $$ +TrayExecByTray 9 1 $$ +TrayExecByTray 9 2 $$ +TrayExecByTray 9 3 $$ +TrayExecByTray 9 4 $$ +TrayExecByTray 9 5$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 7$$ +TrayExecByTray 9 8$$ +TrayExecByTray 9 9"
With this command we have a mirror of all the Slots on tray 10. If we are in Phase one we will be executing the commands in Red and Purple from left to right. If we are in Phase Two we will be executing the commands in Blue and Purple from right to left.

Let us examine a situation where we might consider super buffing and wanting to launch our Torpedo as soon as the buff is complete. We would place our sequence of buffs on Tray 10 in reverse order and excluding the launch of the Torpedo. The key bind command would look as follows:
numpad0 "+TrayExecByTray 9 9$$ +TrayExecByTray 9 8$$ +TrayExecByTray 9 7$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 5$$ +TrayExecByTray 9 4$$ +TrayExecByTray 9 3$$ +TrayExecByTray 9 2$$ +TrayExecByTray 9 1$$ +TrayExecByTray 9 0$$FireTorps $$+TrayExecByTray 9 0 $$ +TrayExecByTray 9 1 $$ +TrayExecByTray 9 2 $$ +TrayExecByTray 9 3 $$ +TrayExecByTray 9 4 $$ +TrayExecByTray 9 5$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 7$$ +TrayExecByTray 9 8$$ +TrayExecByTray 9 9"
Now the mirror of commands exists around the FireTorps command in the center. This will ensure our buffs will execute from Right to Left on Tray 10 and then fire the Torpedo, when no other actions are available on the Tray.

The image below demonstrates the mirror effect with a keybind:

For Space Pilots
This command reassigns the space bar to fire cannons and beams as well as all of tray 10. Leaving tray 10 empty will still allow firing of cannons and beams. You will need to use the text file method to make this work.
Space "+TrayExecByTray 9 9$$ +TrayExecByTray 9 8$$ +TrayExecByTray 9 7$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 5$$ +TrayExecByTray 9 4$$ +TrayExecByTray 9 3$$ +TrayExecByTray 9 2$$ +TrayExecByTray 9 1$$ +TrayExecByTray 9 0$$FirePhasers $$+TrayExecByTray 9 0 $$ +TrayExecByTray 9 1 $$ +TrayExecByTray 9 2 $$ +TrayExecByTray 9 3 $$ +TrayExecByTray 9 4 $$ +TrayExecByTray 9 5$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 7$$ +TrayExecByTray 9 8$$ +TrayExecByTray 9 9"

Using the text file example below you can assign a key to seven trays and create conditional keys that include ship maintenance or a super buff for a tactical officer on the ground. Or even continuous healing for a Science officer.

The Text File method, by far out performs the chat window method, due to the fact that we can solve the Phase one and Phase two issues by mirroring the commands around a central command.

Dangers of Button Smashing

There are some problems with smashing buttons too fast. Once an ability is ending its activation, while you are smashing buttons, the item waiting in the queue to be activated next is not yet determined. Smashing buttons will constantly reset the progression through the sequence of slots. The animation below demonstrate the possible issue that might arise:

Ideally you want to press your key no faster than the lowest activation time. If you have an ability on your tray that has no activation time, then ignore it. Find the ability with the lowest activation time and use that as a reference. If your lowest activation time is 0.5 seconds then you will want to press your key about twice a second. If it is 0.25 seconds then you will want to press your key about 4 times a second. Even at 4 times a second you could be over doing it. If your ping time is higher than the rate at which you are pressing buttons then reduce how often you are pressing buttons. For example: if your ping is 300ms (0.3 sec) and your lowest activation time is 150ms (0.15 sec) then use the 0.3 sec as your reference. Which in this example will be 3 times a second.

Text File Example

Left "+TrayExecByTray 9 9$$ +TrayExecByTray 9 8$$ +TrayExecByTray 9 7$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 5$$ +TrayExecByTray 9 4$$ +TrayExecByTray 9 3$$ +TrayExecByTray 9 2$$ +TrayExecByTray 9 1$$ +TrayExecByTray 9 0$$+TrayExecByTray 9 0 $$ +TrayExecByTray 9 1 $$ +TrayExecByTray 9 2 $$ +TrayExecByTray 9 3 $$ +TrayExecByTray 9 4 $$ +TrayExecByTray 9 5$$ +TrayExecByTray 9 6$$ +TrayExecByTray 9 7$$ +TrayExecByTray 9 8$$ +TrayExecByTray 9 9"
Down "+TrayExecByTray 8 9$$ +TrayExecByTray 8 8$$ +TrayExecByTray 8 7$$ +TrayExecByTray 8 6$$ +TrayExecByTray 8 5$$ +TrayExecByTray 8 4$$ +TrayExecByTray 8 3$$ +TrayExecByTray 8 2$$ +TrayExecByTray 8 1$$ +TrayExecByTray 8 0$$+TrayExecByTray 8 0 $$ +TrayExecByTray 8 1 $$ +TrayExecByTray 8 2$$ +TrayExecByTray 8 3 $$ +TrayExecByTray 8 4 $$ +TrayExecByTray 8 5$$ +TrayExecByTray 8 6$$ +TrayExecByTray 8 7$$ +TrayExecByTray 8 8$$ +TrayExecByTray 8 9"
Right "+TrayExecByTray 7 9$$ +TrayExecByTray 7 8$$ +TrayExecByTray 7 7$$ +TrayExecByTray 7 6$$ +TrayExecByTray 7 5$$ +TrayExecByTray 7 4$$ +TrayExecByTray 7 3$$ +TrayExecByTray 7 2$$ +TrayExecByTray 7 1$$ +TrayExecByTray 7 0$$+TrayExecByTray 7 0 $$ +TrayExecByTray 7 1 $$ +TrayExecByTray 7 2 $$ +TrayExecByTray 7 3 $$ +TrayExecByTray 7 4 $$ +TrayExecByTray 7 5$$ +TrayExecByTray 7 6$$ +TrayExecByTray 7 7$$ +TrayExecByTray 7 8$$ +TrayExecByTray 7 9"
Up "+TrayExecByTray 6 9$$ +TrayExecByTray 6 8$$ +TrayExecByTray 6 7$$ +TrayExecByTray 6 6$$ +TrayExecByTray 6 5$$ +TrayExecByTray 6 4$$ +TrayExecByTray 6 3$$ +TrayExecByTray 6 2$$ +TrayExecByTray 6 1$$ +TrayExecByTray 6 0$$+TrayExecByTray 6 0 $$ +TrayExecByTray 6 1 $$ +TrayExecByTray 6 2 $$ +TrayExecByTray 6 3 $$ +TrayExecByTray 6 4 $$ +TrayExecByTray 6 5$$ +TrayExecByTray 6 6$$ +TrayExecByTray 6 7$$ +TrayExecByTray 6 8$$ +TrayExecByTray 6 9"
Add "+TrayExecByTray 5 9$$ +TrayExecByTray 5 8$$ +TrayExecByTray 5 7$$ +TrayExecByTray 5 6$$ +TrayExecByTray 5 5$$ +TrayExecByTray 5 4$$ +TrayExecByTray 5 3$$ +TrayExecByTray 5 2$$ +TrayExecByTray 5 1$$ +TrayExecByTray 5 0$$+TrayExecByTray 5 0 $$ +TrayExecByTray 5 1 $$ +TrayExecByTray 5 2 $$ +TrayExecByTray 5 3 $$ +TrayExecByTray 5 4 $$ +TrayExecByTray 5 5$$ +TrayExecByTray 5 6$$ +TrayExecByTray 5 7$$ +TrayExecByTray 5 8$$ +TrayExecByTray 5 9"
Divide "+TrayExecByTray 4 9$$ +TrayExecByTray 4 8$$ +TrayExecByTray 4 7$$ +TrayExecByTray 4 6$$ +TrayExecByTray 4 5$$ +TrayExecByTray 4 4$$ +TrayExecByTray 4 3$$ +TrayExecByTray 4 2$$ +TrayExecByTray 4 1$$ +TrayExecByTray 4 0$$+TrayExecByTray 4 0 $$ +TrayExecByTray 4 1 $$ +TrayExecByTray 4 2 $$ +TrayExecByTray 4 3 $$ +TrayExecByTray 4 4 $$ +TrayExecByTray 4 5$$ +TrayExecByTray 4 6$$ +TrayExecByTray 4 7$$ +TrayExecByTray 4 8$$ +TrayExecByTray 4 9"
numpad0 "+TrayExecByTray 3 9$$ +TrayExecByTray 3 8$$ +TrayExecByTray 3 7$$ +TrayExecByTray 3 6$$ +TrayExecByTray 3 5$$ +TrayExecByTray 3 4$$ +TrayExecByTray 3 3$$ +TrayExecByTray 3 2$$ +TrayExecByTray 3 1$$ +TrayExecByTray 3 0$$+TrayExecByTray 3 0 $$ +TrayExecByTray 3 1 $$ +TrayExecByTray 3 2 $$ +TrayExecByTray 3 3 $$ +TrayExecByTray 3 4 $$ +TrayExecByTray 3 5$$ +TrayExecByTray 3 6$$ +TrayExecByTray 3 7$$ +TrayExecByTray 3 8$$ +TrayExecByTray 3 9"

Other Resources

STO Wiki Guide